package com.nowcoder.community.mapper;

import com.nowcoder.community.pojo.DiscussPost;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository("discussPostMapper")
public interface DiscussPostMapper {

    /**
     * 查询一个用户的某页的帖子
     * @param userId  用户id
     * @param offset  每一页的起始行号
     * @param limit   每一页显示的行数
     * @param orderMode 排序模式  0是按帖子类型、创建时间降序；1是按帖子类型、分数、创建时间降序
     * @return 返回帖子列表
     */
    List<DiscussPost> selectDiscussPosts(@Param("userId") int userId,
                                         @Param("offset") int offset,
                                         @Param("limit") int limit,
                                         @Param("orderMode") int orderMode);

    /**
     * 查询帖子数.@Param用来给参数取别名，如果方法中只有一个参数且在动态SQL中的条件标签中使用,则使用这个注解加别名
     * @param userId 用户id
     * @return 返回帖子数量
     */
    int selectDiscussPostRows(@Param("userId") int userId);


    /**
     * 添加帖子
     * @param discussPost 帖子实例
     * @return 添加帖子的数量
     */
    int addDiscussPost(DiscussPost discussPost);

    /**
     * 根据帖子id去查询帖子
     * @param id 帖子id
     * @return 帖子实例
     */
    DiscussPost selectDiscussPostById(@Param("id") int id);

    /**
     * 更新帖子中的评论数量
     * @param id 帖子id
     * @param commentCount 当前帖子中增加的评论数量
     * @return 增加的评论个数
     */
    int updateCommentCount(@Param("id") int id, @Param("commentCount") int commentCount);

    /**
     * 删除某个用户的帖子信息
     * @param userId 用户id
     * @return 删除帖子的个数
     */
    int deleteDiscussPostsByUserId(@Param("id") int userId);

    /**
     * 更新帖子的类型
     * @param id 帖子id
     * @param type 帖子类型（0-普通; 1-置顶;）
     * @return 更新帖子类型的数量
     */
    int updateType(@Param("id") int id, @Param("type") int type);

    /**
     * 更新帖子状态
     * @param id 帖子id
     * @param status 帖子状态（0-正常; 1-精华; 2-拉黑;）
     * @return 更新帖子类型的数量
     */
    int updateStatus(@Param("id") int id, @Param("status") int status);

    /**
     * 更新帖子分数
     * @param id 帖子id
     * @param score 帖子分数
     * @return 更新帖子的数量
     */
    int updateScore(@Param("id") int id, @Param("score") double score);

}
